package com.wzw.basics.reflection.example;

import java.util.List;
import java.util.Map;

/**
 * @author Wangzhiwen
 */
public class Demo9<K,V> {

    /**
     * 1、Demo10<K, V>：  --------> 对应java中的Class对象
     * 2、<K, V>：定义了2个泛型变量，泛型变量对应TypeVariable接口
     * 3、Map<String, ? extends List<? extends Map<K, V>>> [][]map：定义了一个二维泛型数组，泛型数组用GenericArrayType接口表示
     * 4、map中的每个元素是这个是Map<String, ? extends List<? extends Map<K, V>>> []类型的，是一个一维泛型数组，泛型数组用GenericArrayType接口表示。
     * 5、再继续拆解，Map<String, ? extends List<? extends Map<K, V>>> []中每个元素是Map<String, ? extends List<? extends Map<K, V>>>泛型类型的，泛型类型在java中使用ParameterizedType接口表示
     * 6、拆解Map<String, ? extends List<? extends Map<K, V>>>后面尖括号中的参数列表，可以调用ParameterizedType接口的Type[] getActualTypeArguments()方法获取，Map后面的尖括号中有2个参数，分别是String和? extends List<? extends Map<K, V>>
     * 7、String是java中定义的类型，对应java中的Class对象
     * 8、? extends List<? extends Map<K, V>>是通配符类型的，对应WildcardType接口，通配符指定了上边界，上边界是List<? extends Map<K, V>>
     * 9、List<? extends Map<K, V>>又是一个泛型类型，泛型类型对应ParameterizedType接口，List<? extends Map<K, V>>的尖括号中又定义了这个泛型类型的具体的类型? extends Map<K, V>
     * 10、? extends Map<K, V>又是一个通配符类型，对应WildcardType接口,这个通配符指定了上边界为Map<K,V>
     * 11、Map<K,V>又对应泛型类型，泛型类型对应ParameterizedType接口，调用这个接口的getActualTypeArguments()方法获取泛型中的参数列表K和V
     * 12、K和V是Demo10中定义的泛型变量类型，泛型变量类型对应TypeVariable接口
     */
    private Map<String, ? extends List<? extends Map<K, V>>> [][] map;

}
